package karaoke.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import karaoke.excepcion.DAOExcepcion;
import karaoke.modelo.Producto;
import karaoke.modelo.TipoProducto;
import karaoke.util.ConexionBD;

public class ProductoDAO extends BaseDAO {
		
/*
 IdProductos,Nombre_Prod,Precio_Prod,Disponibilidad_Prod,Nombre_Artista,Tipo_Producto_idTipo_Producto
 */
	
	public Producto obtener(int IdProductos) throws DAOExcepcion {
			
		//System.out.println("ProductoDAO: obtener(int IdProdcutos)");
		Producto vo = new Producto();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from producto where IdProdcutos=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdProductos);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdProductos(rs.getInt(1));
				vo.setNombre_Prod(rs.getString(2));
				vo.setPrecio_Prod(rs.getInt(3));
				vo.setDisponibilidad_Prod(rs.getBoolean(4));
				vo.setNombre_Artista(rs.getString(5));
				vo.setTipoProducto(rs.getInt(6));
				
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
		
	public Collection<Producto> buscarPorNombre(String Nombre_Prod)
			throws DAOExcepcion {
		String query = "select producto.*,tipo_producto.Descripcion_Tipo as ncategiria "
				+ "from producto,tipo_producto "
				+ "where producto.Nombre_Prod like ? and tipo_producto.idTipo_Producto = producto.Tipo_Producto_idTipo_Producto";
		Collection<Producto> c = new ArrayList<Producto>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + Nombre_Prod + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Producto vo = new Producto();						
				vo.setIdProductos(rs.getInt("IdProductos"));
				vo.setNombre_Prod(rs.getString( "Nombre_Prod"));
				//System.out.println("--------->" + vo.getNombre_Prod());
				vo.setPrecio_Prod(rs.getInt("Precio_Prod"));
				vo.setDisponibilidad_Prod(rs.getBoolean("Disponibilidad_Prod"));
				vo.setNombre_Artista(rs.getString("Nombre_Artista"));
				vo.setTipoProducto(rs.getInt("Tipo_Producto_idTipo_Producto"));
			
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
		
	public Producto insertar(Producto vo) throws DAOExcepcion {
		String query = "insert into Producto(Nombre_Prod,Precio_Prod,Disponibilidad_Prod,Nombre_Artista,Tipo_Producto_idTipo_Producto) values (?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,  vo.getNombre_Prod());
			stmt.setInt(2, vo.getPrecio_Prod());
			stmt.setBoolean (3, vo.getDisponibilidad_Prod());
			stmt.setString(4, vo.getNombre_Artista());
			stmt.setInt(5, vo.getTipoProducto());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			
		}catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
	
	public void eliminar(int IdProductos) throws DAOExcepcion {
		String query = "delete from Producto WHERE IdProductos=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdProductos);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	
	public Producto actualizar(Producto vo) throws DAOExcepcion {
		String query = "update Producto set Nombre_Prod=?,Precio_Prod=?,Disponibilidad_Prod=?,Nombre_Artista=?,Tipo_Producto_idTipo_Producto=? where IdProductos=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombre_Prod());
			stmt.setInt(2, vo.getPrecio_Prod());
			stmt.setBoolean(3, vo.getDisponibilidad_Prod());
			stmt.setString(4, vo.getNombre_Artista());
			stmt.setInt(5, vo.getTipoProducto());
			stmt.setInt(6, vo.getIdProductos());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	
	
	
	
	
	
	
	
	
}
